<%@page import="untiring07.j2ee.basic.projectv5.dao.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>JSTL : Java Standard Tag Library</title>
</head>
<body>
<h1>JSTL : Java Standard Tag Library</h1>
<h3>개요</h3>
<p>Map이나 List등의 컬렉션 항목 순회하기, 조건에
따라 실행, XML 처리, DB 접근 및 조작등의
일반적인 작업을 처리하는 사용자 정의 태그
라이브러리의 집합</p>
<p>jstl.java.net에서 API, implementation 모두 다운로드
- 2014.01 기준 최신버전은 1.2.1(api), 1.2.2(impl)</p>
<p>다운로드 받은 jar 파일은 WEB-INF/lib에 저장</p>
<p>JSP 페이지에서 JSTL을 사용하려면 taglib 지시문 사용</p>


<h3>구성요소</h3>
<p>core : 변수지원, 흐름제어, URL 관리, 기타등등
				 - 접두사는 c</p>
<p>i18n : 로케일, 메세지/날짜/시간 형식지정
				- 접두사는 fmt</p>
<p>functions : 다양한 문자처리용 함수 - 접두사는 fn</p>
<p>SQL : 다양한 SQL 작업용 라이브러리 - 접두사는 sql</p>
<p>XML : 기본적인 XML 작업용 라이브러리 
				- 접두사는 xml</p>

<h3>core</h3>
<p>out	: 표현식을 평가하고 결과를 JspWriter로 출력 <br />
		JSP 2.x 이상에서는 $&#123; } 를 더 많이 사용<br />
		변수값을 xml escaping 해야 하는 경우
		여전히 out 태그를 사용함 (XSS 공격 방지)</p>
<p>set : 문자열 생성 및 유효범위내 변수 생성</p>
<p>remove : 변수 제거시 사용</p>

<p>if : </p>
<p>choose, when, default : </p>

<p>forEach : 반복 실행 또는 컬렉션을 순회 <br />
	  forEach 태그는 코드를 정해진 횟수만큼
	  반복해서 실행하거나 객체 컬렉션을 
	  순회하는데 사용<br />
	  var : 이 속성으로 만들어진 변수는 
	          forEach가 실행중일때에만 유효함<br />
	          즉, forEach가 끝나면 이 변수는 소멸됨<br />
	  varStatus 속성에는 count, last       <br />
	  forEach는 중첩이 가능</p>
	  
<h3>형식화 태그</h3>
<p>formatDate : 날짜 출력</p>
<p>formatTime : 시간출력</p>
<p>parseNumber:숫자형태로 변환</p>
<p>parseDate : 날짜형태로 변환</p>

<h3>함수 태그</h3>
<p>length : 변수명 문자길이 </p>
<p>substring: 변수 잘라내 표현</p>
<p>indexOf :  변수 포함 문자 자리</p>
<p>escapeXml : </p>
<p>startsWith :</p>
<p>endsWith </p>
<p>contains</p>
<p>split</p>

<hr />
	<p> <c:out value="아아아앙" /> </p>
	<p> <c:out value="${ param.msg }" 
						default="우우우우" /> </p>
	<p> <c:out value="${ param.msg }" 
			escapeXml="false">우우우우</c:out> </p>
		<!-- 11JSTL.jsp?msg=<script>
						while(true){alert('우어어어');}
						</script>-->
	<p> <c:set var="uid" value="untiring07" /> : ${ uid } </p>
	<p> <c:set var="pwd">123456</c:set> : ${ pwd }  </p>
	<p> <jsp:useBean id="b" 
	class="untiring07.j2ee.basic.projectv5.model.BoardVO" />
		<c:set target="${b}" property="title">abcdef</c:set>
		${b.title}
	 </p>
	<p> <c:remove var="uid" /> <c:remove var="pwd" />
		${uid} / ${pwd} </p>
	<hr/>
	<p><c:if test="${param.uid eq 'untiring07'and param.pwd eq '123456'}">로그인에 성공했습니다.</c:if>
	<c:if test="${param.uid ne 'untiring07'or param.pwd ne '123456'}"><h3 style="color:red">로그인에 실패했습니다.</h3></c:if></p>
	<p>${(param.uid eq 'untiring07'and param.pwd eq '123456')?"로그인 성공!":"로그인실패!"}</p>
	<p>
		<c:choose>
			<c:when test="${param.type eq 'member'}">정회원입니다</c:when>
			<c:when test="${param.type eq 'guest'}">손님입니다</c:when>
			<c:otherwise>등록하세요</c:otherwise>
		</c:choose>
	</p>
	<hr/>
	<p>
		<!--  for(int i=0;i<10;++i){} -->
		<c:forEach var="i" begin="1" end="10" step="1">${i}</c:forEach>
		<br/>
		<c:forEach var="b" items="<%=BoardDAO.listBoard()%>">${b.bdno }/${b.title }/${b.uid }</c:forEach>
		<c:forTokens var="item" items="a,b,c,d,e,1,2,3,4,5" delims=",">${item}</c:forTokens>
	</p>
	<hr/>
	<p>
		<fmt:formatNumber value="12" type="number"></fmt:formatNumber>
		<fmt:formatNumber value="12" type="number" minIntegerDigits="3"></fmt:formatNumber>
		<fmt:formatNumber value="12.345" type="number" minFractionDigits="2"></fmt:formatNumber>
	</p>
	<p>
		<fmt:formatNumber value="123.345" pattern=".00"/>
		<fmt:formatNumber value="1234.345" pattern="#,##00.0#"/>
		<fmt:formatNumber value="123.30" pattern="#,##00.0#"/>
		<fmt:formatNumber value="0123.30" pattern="#,##00.00"/>
	</p>
	<p> 
		<fmt:formatNumber value="123.3" type="currency"/>
		<fmt:formatNumber value="0.314" type="percent"/>
	</p>
	<hr/>
	<p> 
		<jsp:useBean id="now" class="java.util.Date"/>
	</p>
	<p>
		[<fmt:formatDate value="${now}" />]
		[<fmt:formatDate value="${now}" dateStyle="short"/>]
		[<fmt:formatDate value="${now}" dateStyle="medium"/>]
		[<fmt:formatDate value="${now}" dateStyle="long"/>]
		[<fmt:formatDate value="${now}" dateStyle="full"/>]
	</p>
	<p>
		[<fmt:formatDate value="${now}" type="time"/>]
		[<fmt:formatDate value="${now}" type="time" timeStyle="short"/>]
		[<fmt:formatDate value="${now}" type="time" timeStyle="medium"/>]
		[<fmt:formatDate value="${now}" type="time" timeStyle="long"/>]
		[<fmt:formatDate value="${now}" type="time" timeStyle="full"/>]
	</p>
	<p>
		[<fmt:formatDate value="${now}" type="both" timeStyle="long" dateStyle="full"/>]
	</p>
	<p>
		[<fmt:formatDate value="${now}" type="both" pattern="yyyy-MM-dd"/>]
		[<fmt:formatDate value="${now}" type="both" pattern="hh:mm:ss"/>]
		[<fmt:formatDate value="${now}" type="both" pattern="a hh:mm:ss"/>]
	</p>
	<hr/>
	<p>
		<fmt:parseNumber var="no" type="number" value="${param.no }"/>${no}
		<!-- ?uid=untiring07&pwd=123456&no=987 -->
	</p>
	<p>
		<fmt:parseDate var="today" type="date" value="${param.today }" pattern="yyyy-MM-dd"/>${today }<br/>
		[<fmt:formatDate value="${today}" dateStyle="long"/>]
		<!-- ?no=987&today=2014-01-10 -->
	</p>
	<hr/>
		<c:set var="jumin" value="123456-1234567"/>
		<c:set var="html" value="<h1>Hello,JSTL</h1>"/>
		<c:set var="tokens" value="1,2,3,4,5,6,7"/>
	<p>
		jumin의 총 문자수 :${fn:length(jumin)}<br/>
		html의 총 문자수${fn:length(html)}<br/>
		tokens의 총 문자수${fn:length(tokens)}<br/>
	</p>
	<p>
		성별체크 : ${fn:substring(jumin,7,8)}<br/>
		생년월일 : ${fn:substring(jumin,0,6)}
	</p>
	<p>
		'-'문자가 포함된 위치 : ${fn:indexOf(jumin,'-')}
	</p>
	<p>
		escaping 안된 태그 : ${html}
		escaping 된 태그 : ${fn:escapeXml(html)}
	</p>
	<p>
		'1'이라는 문자로 시작하는가?: ${fn:startsWith(tokens,'1')}<br/>
		'7'이라는 문자로 끝나는가? : ${fn:endsWith(tokens,'7')}<br/>
	</p>
	<p>
		'5'라는 문자가 포함되었는가?
		${fn:contains(tokens,'5')}
	</p>
	<p>
		${fn:split(tokens,'')}<br />
		<c:forEach var="t" items="${fn:split(tokens,',') }">${t}</c:forEach>
	</p>
	<p>
		'5'라는 문자가 포함되었는가?
		${fn:contains(tokens,'5')}
	</p>

<h3></h3>
<p></p>
<h3></h3>
<p></p>















</body>
</html>